This invention relates in general to memory management and, more particularly, to printer memory management.
For purposes of this application, the phrase xe2x80x9cprint dataxe2x80x9d refers to data that a printer receives from a host that describes the page or pages that are to be printed. Thus print data is representative of an image that is to be printed. Print data could be, for example, in printer control language (PCL), PostScript [PostScript is a trademark of Adobe Systems Incorporated.] or even raster data. It is further noted that the phrase xe2x80x9cvideo dataxe2x80x9d refers herein to data that is ready to be transferred to a print engine so as to cause the print engine to form an image on a page.
It is well known that laser print engines typically operate at a constant speed. If new video data is not available at a rate that keeps up with the operation of the print engine, the page is not printed. This condition is sometimes referred to as a print xe2x80x9cunderrunxe2x80x9d condition or alternatively as a print xe2x80x9coverrunxe2x80x9d condition.
One technique for preventing print underruns is to convert received print data into a full page of raster data that can quickly be converted (if necessary) to video data. This technique ensures that video data will always be ready for the print engine. Unfortunately, printers that use this technique can require a large amount of raster memory which can increase the cost of the printer. For example, consider a laser printer that is able to print 24-bit color Red-Blue-Green (RGB) images at 600 dot-per-inch (DPI) resolution. In order to store a full page of raster data representative of such an image, over 96 Mbytes of raster memory is required.
In order to reduce printer cost, substantial efforts have been directed towards developing improved techniques that can be used to reduce the need for raster memory in a printer without creating print underrun conditions. One of these techniques involves first converting received print data into a list of commands, called a display list. The display list typically requires a small amount of memory space to represent an image that is to be printed on a page. The list of commands forming the display list are then sorted according to their vertical position on the page. The sorted display list is then divided into sections called xe2x80x9cpage stripsxe2x80x9d. Each page strip is representative of a portion of the image that is to be printed. The page strips can then be selectively rasterized and then stored into memory. For example, particular page strips that are determined to have an unacceptable rasterization execution time can be rasterized and stored prior to starting the print engine in order to prevent print underruns. An example of this type of technique is described in U.S. Pat. No. 5,129,049 entitled xe2x80x9cMethod and Apparatus for Preventing Print Overrunsxe2x80x9d. That patent is incorporated herein by reference.
In order to further reduce the need for printer memory, some or all of the page strips after rasterization can be compressed and then stored into memory. One technique that can be used to compress rasterized page strips can be found in U.S. Pat. No. 5,479,587 entitled xe2x80x9cPage Printer Having Adaptive Data Compression for Memory Minimizationxe2x80x9d, issued to Campbell et al. That patent is incorporated herein by reference. In Campbell, one of a number of lossless and lossy compression procedures are selected to compress a rasterized page strip in order to make optimal use of available printer memory.
It can be seen that a compressed page strip can require additional time for conversion to video data during a printing operation. This is due to the additional time required to decompress the compressed page strip prior to its conversion to video data. In order to prevent print underruns, this additional time must be taken into account. This issue is addressed in the application entitled xe2x80x9cBalancing Compressed Storage Requirements with Decompression Times during Punt Protection Processing in a Page Printerxe2x80x9d, filed Oct. 29, 1998 and having application Ser. No. 09/175903. That application is incorporated by reference. Improved techniques are needed, however, to ensure optimized print quality, optimum use of printer memory, and that print underruns are prevented.
A system is described for transmitting video data at a pre-determined rate to a marking engine. The system includes a source for supplying uncompressed data that is representative of a plurality of sub_line units in an image, a memory, a first compressor, a second compressor, an analyzer and a video generator. The fist compressor is operable, upon being enabled, to receive the uncompressed data and to apply a first compression procedure to the uncompressed data so as to generate a first compressed data and to write the first compressed data into the memory. The second compressor is operable, upon being enabled, to apply a second compression procedure to the uncompressed data so as to generate a second compressed data and to write the second compressed data into the memory. The analyzer operates to determine if the first compressed data includes a local compression ratio associated with at least one sub_line unit from the plurality of sub_line units being below a threshold local compression ratio and if so, to enable the second compressor thereby causing the second compressor to generate the second compressed data and to write the second compressed data into the memory as a final compressed form. The video generator is operable to retrieve the final compressed form from the memory and to convert the final compressed form into the video data and to transmit the video data to the print engine at the pre-determined rate.
A method of converting uncompressed data representative of a plurality of sub_line units into a final compressed form and of writing the final compressed form into a memory. The method includes the steps of: applying a first lossless compression procedure to at least a portion of the uncompressed data to produce a first compressed data; and determining if the first compressed data includes a local compression ratio associated with at least one sub_line unit from the plurality of sub_line units below a threshold local compression ratio, and if so applying at least one other second compression procedure to the first data so as to convert the first data into a second compressed data and writing the second compressed data as the final compressed form into the memory.